package d1221;

import java.util.Objects;

/*
Object类中的hashcode方法，该方法返回的是对象的逻辑地址值
物理地址： 在内存创建对象的实际地址
逻辑地址： 根据对象创建对象在内存中的实际地址模拟出来的逻辑地址

在java中如果两个对象的类型相同，且属性值也完全相同，就认为是同一个对象
两个对象的内容属性值相等，hash值（逻辑地址值）就是一样的
hash值相同，不一定是同一个对象(hash)冲突
hash值不同，一定是不同的对象

java中判断两个对象是否真正的相等（属性值相同），只能通过equals方法进行比较
java中可以通过hash值判断两个对象不相等
 */
public class a2 {
    public static void main(String[] args) {
        Stu stu1 = new Stu(101,"tom");
        Stu stu2 = new Stu(101,"tom");
        System.out.println(stu1.hashCode());
        System.out.println(stu2.hashCode());
        System.out.println(stu1.hashCode()==stu2.hashCode());

        String s = "重低";//119118
        String s1 = "通话";//119118
        System.out.println(s.hashCode()+" "+s1.hashCode());
    }
}
class  Stu{
    private Integer stuId;
    private String  name;

    public Stu(Integer stuId, String name) {
        this.stuId = stuId;
        this.name = name;
    }

    public Stu() {
    }

    public Integer getStuId() {
        return stuId;
    }

    public void setStuId(Integer stuId) {
        this.stuId = stuId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;

    }

    @Override
    public boolean equals(Object o) {

        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Stu stu = (Stu) o;
        return Objects.equals(stuId, stu.stuId) &&
                Objects.equals(name, stu.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(stuId, name);
    }

    @Override
    public String toString() {
        return "Stu{" +
                "stuId=" + stuId +
                ", name='" + name + '\'' +
                '}';
    }
}

